package socket_net_code.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*
_网络编程(网络编程三要素之IP概述)(掌握)
    每个设备在网络中的唯一标识
    每台网络终端在网络中都有一个独立的地址，我们在网络中传输数据就是使用这个地址。
    ipconfig：查看本机IP192.168.12.42
    ping：测试连接192.168.40.62
    本地回路地址：127.0.0.1 255.255.255.255是广播地址
    IPv4：4个字节组成，4个0-255。大概42亿，30亿都在北美，亚洲4亿。2011年初已经用尽。
    IPv6：8组，每组4个16进制数。
    1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f
    1a2b::aaaa:0000:0000:0000:aabb:1f2f
    1a2b:0000:aaaa::aabb:1f2f
    1a2b:0000:aaaa::0000:aabb:1f2f
    1a2b:0000:aaaa:0000::aabb:1f2f

_网络编程(网络编程三要素之端口号概述)(掌握)
    每个程序在设备上的唯一标识
    每个网络程序都需要绑定一个端口号，传输数据的时候除了确定发到哪台机器上，还要明确发到哪个程序。
    端口号范围从:0-65535
    编写网络应用就需要绑定一个端口号，尽量使用1024以上的，1024以下的基本上都被系统程序占用了。
    常用端口
    mysql: 3306
    oracle: 1521
    web: 80
    tomcat: 8080
    QQ: 4000
    feiQ: 2425

_网络编程(网络编程三要素协议)(掌握)
为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
UDP
面向无连接，数据不安全，速度快。不区分客户端与服务端。
TCP 　　* 面向连接（三次握手），数据安全，速度略低。分为客户端和服务端。
三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据

_Socket套接字概述：
    网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
    通信的两端都有Socket。
    网络通信其实就是Socket间的通信。
    数据在两个Socket间通过IO流传输。
    Socket在应用程序中创建，通过一种绑定机制与驱动程序建立关系，告诉自己所对应的IP和port
 */
public class Demo1_Send {
    /*
_网络编程(UDP传输)(了解)
    1.发送Send
    创建DatagramSocket, 随机端口号
    创建DatagramPacket, 指定数据, 长度, 地址, 端口
    使用DatagramSocket发送DatagramPacket
    关闭DatagramSocket
    2.接收Receive
    创建DatagramSocket, 指定端口号
    创建DatagramPacket, 指定数组, 长度
    使用DatagramSocket接收DatagramPacket
    关闭DatagramSocket
    从DatagramPacket中获取数据
    3.接收方获取ip和端口号
    String ip = packet.getAddress().getHostAddress();
    int port = packet.getPort();
     */
    public static void main(String[] args) throws IOException {
        String str = "I want to be a rich man!!!";
        DatagramSocket socket = new DatagramSocket();//创建Socket相当于创建码头
        DatagramPacket packet =  //创建Packet相当于集装箱
                new DatagramPacket(
                        str.getBytes(),str.getBytes().length, InetAddress.getByName("172.20.10.2"),6666);
        socket.send(packet);
        socket.close();
    }


}
